home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Muzyka / Edytory sampli (probek dzwieku) / ZynAddSubFX_2.2.0 / Setup_ZynAddSubFX-2.2.0.exe / source code / Synth / SUBnote.h < prev   
C/C++ Source or Header  |  2005-03-14  |  3KB  |  99 lines

  1. /*
  2.   ZynAddSubFX - a software synthesizer
  3.  
  4.   SUBnote.h - The subtractive synthesizer
  5.   Copyright (C) 2002-2005 Nasca Octavian Paul
  6.   Author: Nasca Octavian Paul
  7.  
  8.   This program is free software; you can redistribute it and/or modify
  9.   it under the terms of version 2 of the GNU General Public License 
  10.   as published by the Free Software Foundation.
  11.  
  12.   This program is distributed in the hope that it will be useful,
  13.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.   GNU General Public License (version 2) for more details.
  16.  
  17.   You should have received a copy of the GNU General Public License (version 2)
  18.   along with this program; if not, write to the Free Software Foundation,
  19.   Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  20.  
  21. */
  22.  
  23. #ifndef SUB_NOTE_H
  24. #define SUB_NOTE_H
  25.  
  26. #include "../globals.h"
  27. #include "../Params/SUBnoteParameters.h"
  28. #include "../Params/Controller.h"
  29. #include "Envelope.h"
  30. #include "../DSP/Filter.h"
  31.  
  32. class SUBnote{
  33.     public:
  34.     SUBnote(SUBnoteParameters *parameters,Controller *ctl_,REALTYPE freq,REALTYPE velocity,int portamento_,int midinote);
  35.     ~SUBnote();
  36.     int noteout(REALTYPE *outl,REALTYPE *outr);//note output,return 0 if the note is finished
  37.     void relasekey();
  38.     int finished();
  39.         
  40.     int ready; //if I can get the sampledata
  41.     
  42.     private:
  43.     
  44.     void computecurrentparameters();    
  45.     void initparameters(REALTYPE freq);    
  46.     void KillNote();
  47.     
  48.     SUBnoteParameters *pars;
  49.  
  50.     //parameters
  51.         int stereo;
  52.     int numstages;//number of stages of filters
  53.     int numharmonics;//number of harmonics (after the too higher hamonics are removed)
  54.     int start;//how the harmonics start
  55.     REALTYPE basefreq;
  56.     REALTYPE panning;
  57.     Envelope *AmpEnvelope;
  58.     Envelope *FreqEnvelope;
  59.     Envelope *BandWidthEnvelope;
  60.  
  61.     Filter *GlobalFilterL,*GlobalFilterR;
  62.     
  63.     Envelope *GlobalFilterEnvelope;
  64.     
  65.     //internal values    
  66.     ONOFFTYPE NoteEnabled;
  67.     int firsttick,portamento;
  68.     REALTYPE volume,oldamplitude,newamplitude;
  69.  
  70.     REALTYPE GlobalFilterCenterPitch;//octaves
  71.     REALTYPE GlobalFilterFreqTracking;
  72.  
  73.         struct bpfilter{
  74.         REALTYPE freq,bw,amp; //filter parameters
  75.         REALTYPE a1,a2,b0,b2;//filter coefs. b1=0
  76.         REALTYPE xn1,xn2,yn1,yn2;  //filter internal values
  77.     };
  78.  
  79.     void initfilter(bpfilter &filter,REALTYPE freq,REALTYPE bw,REALTYPE amp,REALTYPE mag);
  80.     void computefiltercoefs(bpfilter &filter,REALTYPE freq,REALTYPE bw,REALTYPE gain);
  81.     void filter(bpfilter &filter,REALTYPE *smps);
  82.  
  83.     bpfilter *lfilter,*rfilter;
  84.     
  85.     REALTYPE *tmpsmp;
  86.     REALTYPE *tmprnd;//this is filled with random numbers
  87.     
  88.     Controller *ctl;
  89.     int oldpitchwheel,oldbandwidth;
  90.     REALTYPE globalfiltercenterq;
  91.     
  92. };
  93.  
  94.  
  95.  
  96.  
  97. #endif
  98.  
  99.